package iet.jxufe.cn.android.productanti_counterfeitingtraceabilitysystem.service;

import org.json.JSONObject;

import iet.jxufe.cn.android.productanti_counterfeitingtraceabilitysystem.entity.User;

/**
 * ILoginService 接口定义了用户登陆和注册的功能。
 * <p>
 * 适用于生产商、经销商和消费者的登陆和消费者的注册。
 * </p>
 */

public interface ILoginService {
    /**
     * 检查登录用户信息，返回结果和身份。
     *
     * @param username 用户名。
     * @param password 密码。
     * @return 一个包含登录结果的 JSON 对象，其字段如下：
     * <ul>
     *     <li><b>success</b> (Boolean): 表示登录是否成功。</li>
     *     <li><b>userId</b> (Integer): 用户的唯一标识。</li>
     *     <li><b>email</b> (String): 用户的邮箱信息。</li>
     *     <li><b>role</b> (Integer): 用户角色
     *         <ul>
     *             <li><b>1</b> : 生产商。</li>
     *             <li><b>2</b> : 经销商。</li>
     *             <li><b>3</b> : 消费者。</li>
     *         </ul>
     *     </li>
     */
    JSONObject login(String username, String password);

    /**
     * 检查用户注册信息，返回结果。
     *
     * @param newUser 用户信息。
     * @see User
     * @return 一个布尔值，true 表示注册成功，false 表示注册失败：
     */
    Boolean register(User newUser);

    /**
     * 返回用户所有基本信息。
     *
     * @param userId 用户唯一标识符。
     * @return User 实体。
     * @see User
     */
    User getUserInfo(Integer userId);

    /**
     * 提供修改用户基本信息，包括用户名、密码、邮箱。
     *
     * @param user 新的用户信息，不管是否需要修改都要包含。<b>一定不能缺少用户唯一标识符 userId</b>
     * @return 一个包含修改结果的 JSON 对象，其字段及可能结果如下：
     * <ul>
     *     <li><b>success</b> (Boolean): 表示修改是否成功。</li>
     *     <li><b>newUserInfo</b> (User): 如果修改成功一并返回新的用户信息。</li>
     * @see User
     */
    JSONObject updateUserInfo(User user);
}
